package tools

import (
	"gitee.com/lllgo/gopkg/tasks"
	"gitee.com/lllgo/opsctl/pkg/conf"
	"sync"
	"time"
)

func DispatchMultiConfig(cfgs []conf.ComponentConfig, f func(c conf.ComponentConfig) error) error {
	parallelTask := tasks.NewParallelTask(0)

	var sc sync.Mutex

	l := len(cfgs)

	for i, config := range cfgs {
		//异步处理配置文件
		config, i := config, i

		parallelTask.AddTask(func(id int) error {
			//预处理完配置文件 同步执行任务 而且为了防止生成同一文件先等待任务间隔时长再执行下一任务
			defer func() {
				if i+1 != l {
					sc.Lock()
					time.Sleep(conf.DelayTime)
					sc.Unlock()
				}
			}()

			return f(config)

		})

	}
	return parallelTask.Start()
}
